package marionito.daoimpl;

import java.util.List;

import javax.ejb.Stateless;

import marionito.dao.CaseDao;
import marionito.domaine.Case;
import marionito.domaine.Joueur;
import marionito.domaine.Partie;

@SuppressWarnings("serial")
@Stateless
public class CaseDaoImpl extends DaoImpl<Integer, Case> implements CaseDao {

	@Override
	public List<Case> lister(Joueur joueur, Partie partie) {
		String query = "select  c from Case c, JoueurPartie jp, IN (jp.listCases) AS lc where c.id = lc.id and jp.joueur.id = ?1 and jp.partie.id = ?2";
		return liste(query, joueur.getId(), partie.getId());
	}

	@Override
	public Case rechercher(int num) {
		return recherche("SELECT c FROM Case c WHERE c.num = ?1", num);
	}

	@Override
	public List<Case> lister(Joueur joueur) {
		String query = "select c from Case c, JoueurPartie jp, IN (jp.listCases) AS lc where c.id = lc.id and jp.joueur.id = ?1";
		return liste(query, joueur.getId());
	}

	@Override
	public Case recherche(Joueur joueur, Partie partie, int numCasePlace) {
		String query = "select  c from Case c, JoueurPartie jp, IN (jp.listCases) AS lc where c.id = lc.id and jp.joueur.id = ?1 and jp.partie.id = ?2 and c.num=?3";
		return recherche(query, joueur.getId(), partie.getId(), numCasePlace);
	}

	@Override
	public Case rechercheCase(Joueur joueur, Partie partie, int valeurJetonPlace) {
		String query = "select  c from Case c, JoueurPartie jp, IN (jp.listCases) AS lc where c.id = lc.id and jp.joueur.id = ?1 and jp.partie.id = ?2 and c.jeton.valeur=?3";
		return recherche(query, joueur.getId(), partie.getId(),
				valeurJetonPlace);
	}

	@Override
	public Case rechercherCaseLibre(Joueur joueur, Partie partie, int deCase) {
		String query = "select c from Case c, JoueurPartie jp, IN (jp.listCases) AS lc where c.id = lc.id and jp.joueur.id = ?1 and jp.partie.id = ?2 and c.jeton is null and c.num=?3";
		return recherche(query,joueur.getId(), partie.getId(), deCase);
	}

}
